home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / Other Langs / Tickle-4.0 (tcl) / tcl / src / tclUnixStr.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-25  |  16.0 KB  |  740 lines  |  [TEXT/MPS ]

  1. #ifdef MPW
  2. #    pragma segment TCL_2
  3. #endif
  4.  
  5. /* 
  6.  * tclUnixStr.c --
  7.  *
  8.  *    This file contains procedures that generate strings
  9.  *    corresponding to various UNIX-related codes, such
  10.  *    as errno and signals.
  11.  *
  12.  * Copyright (c) 1991-1993 The Regents of the University of California.
  13.  * All rights reserved.
  14.  *
  15.  * Permission is hereby granted, without written agreement and without
  16.  * license or royalty fees, to use, copy, modify, and distribute this
  17.  * software and its documentation for any purpose, provided that the
  18.  * above copyright notice and the following two paragraphs appear in
  19.  * all copies of this software.
  20.  * 
  21.  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  22.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  23.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  24.  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25.  *
  26.  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  27.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  28.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  29.  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  30.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  31.  */
  32.  
  33. #ifndef lint
  34. static char rcsid[] = "$Header: /user6/ouster/tcl/RCS/tclUnixStr.c,v 1.17 93/09/09 14:47:55 ouster Exp $ SPRITE (Berkeley)";
  35. #endif /* not lint */
  36.  
  37. #include "tclInt.h"
  38. #include "tclUnix.h"
  39.  
  40. /*
  41.  *----------------------------------------------------------------------
  42.  *
  43.  * Tcl_ErrnoId --
  44.  *
  45.  *    Return a textual identifier for the current errno value.
  46.  *
  47.  * Results:
  48.  *    This procedure returns a machine-readable textual identifier
  49.  *    that corresponds to the current errno value (e.g. "EPERM").
  50.  *    The identifier is the same as the #define name in errno.h.
  51.  *
  52.  * Side effects:
  53.  *    None.
  54.  *
  55.  *----------------------------------------------------------------------
  56.  */
  57.  
  58. char *
  59. Tcl_ErrnoId()
  60. {
  61.     switch (errno) {
  62. #ifdef E2BIG
  63.     case E2BIG: return "E2BIG";
  64. #endif
  65. #ifdef EACCES
  66.     case EACCES: return "EACCES";
  67. #endif
  68. #ifdef EADDRINUSE
  69.     case EADDRINUSE: return "EADDRINUSE";
  70. #endif
  71. #ifdef EADDRNOTAVAIL
  72.     case EADDRNOTAVAIL: return "EADDRNOTAVAIL";
  73. #endif
  74. #ifdef EADV
  75.     case EADV: return "EADV";
  76. #endif
  77. #ifdef EAFNOSUPPORT
  78.     case EAFNOSUPPORT: return "EAFNOSUPPORT";
  79. #endif
  80. #ifdef EAGAIN
  81.     case EAGAIN: return "EAGAIN";
  82. #endif
  83. #ifdef EALIGN
  84.     case EALIGN: return "EALIGN";
  85. #endif
  86. #ifdef EALREADY
  87.     case EALREADY: return "EALREADY";
  88. #endif
  89. #ifdef EBADE
  90.     case EBADE: return "EBADE";
  91. #endif
  92. #ifdef EBADF
  93.     case EBADF: return "EBADF";
  94. #endif
  95. #ifdef EBADFD
  96.     case EBADFD: return "EBADFD";
  97. #endif
  98. #ifdef EBADMSG
  99.     case EBADMSG: return "EBADMSG";
  100. #endif
  101. #ifdef EBADR
  102.     case EBADR: return "EBADR";
  103. #endif
  104. #ifdef EBADRPC
  105.     case EBADRPC: return "EBADRPC";
  106. #endif
  107. #ifdef EBADRQC
  108.     case EBADRQC: return "EBADRQC";
  109. #endif
  110. #ifdef EBADSLT
  111.     case EBADSLT: return "EBADSLT";
  112. #endif
  113. #ifdef EBFONT
  114.     case EBFONT: return "EBFONT";
  115. #endif
  116. #ifdef EBUSY
  117.     case EBUSY: return "EBUSY";
  118. #endif
  119. #ifdef ECHILD
  120.     case ECHILD: return "ECHILD";
  121. #endif
  122. #ifdef ECHRNG
  123.     case ECHRNG: return "ECHRNG";
  124. #endif
  125. #ifdef ECOMM
  126.     case ECOMM: return "ECOMM";
  127. #endif
  128. #ifdef ECONNABORTED
  129.     case ECONNABORTED: return "ECONNABORTED";
  130. #endif
  131. #ifdef ECONNREFUSED
  132.     case ECONNREFUSED: return "ECONNREFUSED";
  133. #endif
  134. #ifdef ECONNRESET
  135.     case ECONNRESET: return "ECONNRESET";
  136. #endif
  137. #if defined(EDEADLK) && (!defined(EWOULDBLOCK) || (EDEADLK != EWOULDBLOCK))
  138.     case EDEADLK: return "EDEADLK";
  139. #endif
  140. #ifdef EDEADLOCK
  141.     case EDEADLOCK: return "EDEADLOCK";
  142. #endif
  143. #ifdef EDESTADDRREQ
  144.     case EDESTADDRREQ: return "EDESTADDRREQ";
  145. #endif
  146. #ifdef EDIRTY
  147.     case EDIRTY: return "EDIRTY";
  148. #endif
  149. #ifdef EDOM
  150.     case EDOM: return "EDOM";
  151. #endif
  152. #ifdef EDOTDOT
  153.     case EDOTDOT: return "EDOTDOT";
  154. #endif
  155. #ifdef EDQUOT
  156.     case EDQUOT: return "EDQUOT";
  157. #endif
  158. #ifdef EDUPPKG
  159.     case EDUPPKG: return "EDUPPKG";
  160. #endif
  161. #ifdef EEXIST
  162.     case EEXIST: return "EEXIST";
  163. #endif
  164. #ifdef EFAULT
  165.     case EFAULT: return "EFAULT";
  166. #endif
  167. #ifdef EFBIG
  168.     case EFBIG: return "EFBIG";
  169. #endif
  170. #ifdef EHOSTDOWN
  171.     case EHOSTDOWN: return "EHOSTDOWN";
  172. #endif
  173. #ifdef EHOSTUNREACH
  174.     case EHOSTUNREACH: return "EHOSTUNREACH";
  175. #endif
  176. #ifdef EIDRM
  177.     case EIDRM: return "EIDRM";
  178. #endif
  179. #ifdef EINIT
  180.     case EINIT: return "EINIT";
  181. #endif
  182. #ifdef EINPROGRESS
  183.     case EINPROGRESS: return "EINPROGRESS";
  184. #endif
  185. #ifdef EINTR
  186.     case EINTR: return "EINTR";
  187. #endif
  188. #ifdef EINVAL
  189.     case EINVAL: return "EINVAL";
  190. #endif
  191. #ifdef EIO
  192.     case EIO: return "EIO";
  193. #endif
  194. #ifdef EISCONN
  195.     case EISCONN: return "EISCONN";
  196. #endif
  197. #ifdef EISDIR
  198.     case EISDIR: return "EISDIR";
  199. #endif
  200. #ifdef EISNAME
  201.     case EISNAM: return "EISNAM";
  202. #endif
  203. #ifdef ELBIN
  204.     case ELBIN: return "ELBIN";
  205. #endif
  206. #ifdef EL2HLT
  207.     case EL2HLT: return "EL2HLT";
  208. #endif
  209. #ifdef EL2NSYNC
  210.     case EL2NSYNC: return "EL2NSYNC";
  211. #endif
  212. #ifdef EL3HLT
  213.     case EL3HLT: return "EL3HLT";
  214. #endif
  215. #ifdef EL3RST
  216.     case EL3RST: return "EL3RST";
  217. #endif
  218. #ifdef ELIBACC
  219.     case ELIBACC: return "ELIBACC";
  220. #endif
  221. #ifdef ELIBBAD
  222.     case ELIBBAD: return "ELIBBAD";
  223. #endif
  224. #ifdef ELIBEXEC
  225.     case ELIBEXEC: return "ELIBEXEC";
  226. #endif
  227. #ifdef ELIBMAX
  228.     case ELIBMAX: return "ELIBMAX";
  229. #endif
  230. #ifdef ELIBSCN
  231.     case ELIBSCN: return "ELIBSCN";
  232. #endif
  233. #ifdef ELNRNG
  234.     case ELNRNG: return "ELNRNG";
  235. #endif
  236. #ifdef ELOOP
  237.     case ELOOP: return "ELOOP";
  238. #endif
  239. #ifdef EMFILE
  240.     case EMFILE: return "EMFILE";
  241. #endif
  242. #ifdef EMLINK
  243.     case EMLINK: return "EMLINK";
  244. #endif
  245. #ifdef EMSGSIZE
  246.     case EMSGSIZE: return "EMSGSIZE";
  247. #endif
  248. #ifdef EMULTIHOP
  249.     case EMULTIHOP: return "EMULTIHOP";
  250. #endif
  251. #ifdef ENAMETOOLONG
  252.     case ENAMETOOLONG: return "ENAMETOOLONG";
  253. #endif
  254. #ifdef ENAVAIL
  255.     case ENAVAIL: return "ENAVAIL";
  256. #endif
  257. #ifdef ENET
  258.     case ENET: return "ENET";
  259. #endif
  260. #ifdef ENETDOWN
  261.     case ENETDOWN: return "ENETDOWN";
  262. #endif
  263. #ifdef ENETRESET
  264.     case ENETRESET: return "ENETRESET";
  265. #endif
  266. #ifdef ENETUNREACH
  267.     case ENETUNREACH: return "ENETUNREACH";
  268. #endif
  269. #ifdef ENFILE
  270.     case ENFILE: return "ENFILE";
  271. #endif
  272. #ifdef ENOANO
  273.     case ENOANO: return "ENOANO";
  274. #endif
  275. #if defined(ENOBUFS) && (!defined(ENOSR) || (ENOBUFS != ENOSR))
  276.     case ENOBUFS: return "ENOBUFS";
  277. #endif
  278. #ifdef ENOCSI
  279.     case ENOCSI: return "ENOCSI";
  280. #endif
  281. #ifdef ENODATA
  282.     case ENODATA: return "ENODATA";
  283. #endif
  284. #ifdef ENODEV
  285.     case ENODEV: return "ENODEV";
  286. #endif
  287. #ifdef ENOENT
  288.     case ENOENT: return "ENOENT";
  289. #endif
  290. #ifdef ENOEXEC
  291.     case ENOEXEC: return "ENOEXEC";
  292. #endif
  293. #ifdef ENOLCK
  294.     case ENOLCK: return "ENOLCK";
  295. #endif
  296. #ifdef ENOLINK
  297.     case ENOLINK: return "ENOLINK";
  298. #endif
  299. #ifdef ENOMEM
  300.     case ENOMEM: return "ENOMEM";
  301. #endif
  302. #ifdef ENOMSG
  303.     case ENOMSG: return "ENOMSG";
  304. #endif
  305. #ifdef ENONET
  306.     case ENONET: return "ENONET";
  307. #endif
  308. #ifdef ENOPKG
  309.     case ENOPKG: return "ENOPKG";
  310. #endif
  311. #ifdef ENOPROTOOPT
  312.     case ENOPROTOOPT: return "ENOPROTOOPT";
  313. #endif
  314. #ifdef ENOSPC
  315.     case ENOSPC: return "ENOSPC";
  316. #endif
  317. #ifdef ENOSR
  318.     case ENOSR: return "ENOSR";
  319. #endif
  320. #if defined(ENOSTR) && (!defined(ENOTTY) || (ENOTTY != ENOSTR))
  321.     case ENOSTR: return "ENOSTR";
  322. #endif
  323. #ifdef ENOSYM
  324.     case ENOSYM: return "ENOSYM";
  325. #endif
  326. #ifdef ENOSYS
  327.     case ENOSYS: return "ENOSYS";
  328. #endif
  329. #ifdef ENOTBLK
  330.     case ENOTBLK: return "ENOTBLK";
  331. #endif
  332. #ifdef ENOTCONN
  333.     case ENOTCONN: return "ENOTCONN";
  334. #endif
  335. #ifdef ENOTDIR
  336.     case ENOTDIR: return "ENOTDIR";
  337. #endif
  338. #if defined(ENOTEMPTY) && (!defined(EEXIST) || (ENOTEMPTY != EEXIST))
  339.     case ENOTEMPTY: return "ENOTEMPTY";
  340. #endif
  341. #ifdef ENOTNAM
  342.     case ENOTNAM: return "ENOTNAM";
  343. #endif
  344. #ifdef ENOTSOCK
  345.     case ENOTSOCK: return "ENOTSOCK";
  346. #endif
  347. #ifdef ENOTTY
  348.     case ENOTTY: return "ENOTTY";
  349. #endif
  350. #ifdef ENOTUNIQ
  351.     case ENOTUNIQ: return "ENOTUNIQ";
  352. #endif
  353. #ifdef ENXIO
  354.     case ENXIO: return "ENXIO";
  355. #endif
  356. #ifdef EOPNOTSUPP
  357.     case EOPNOTSUPP: return "EOPNOTSUPP";
  358. #endif
  359. #ifdef EPERM
  360.     case EPERM: return "EPERM";
  361. #endif
  362. #ifdef EPFNOSUPPORT
  363.     case EPFNOSUPPORT: return "EPFNOSUPPORT";
  364. #endif
  365. #ifdef EPIPE
  366.     case EPIPE: return "EPIPE";
  367. #endif
  368. #ifdef EPROCLIM
  369.     case EPROCLIM: return "EPROCLIM";
  370. #endif
  371. #ifdef EPROCUNAVAIL
  372.     case EPROCUNAVAIL: return "EPROCUNAVAIL";
  373. #endif
  374. #ifdef EPROGMISMATCH
  375.     case EPROGMISMATCH: return "EPROGMISMATCH";
  376. #endif
  377. #ifdef EPROGUNAVAIL
  378.     case EPROGUNAVAIL: return "EPROGUNAVAIL";
  379. #endif
  380. #ifdef EPROTO
  381.     case EPROTO: return "EPROTO";
  382. #endif
  383. #ifdef EPROTONOSUPPORT
  384.     case EPROTONOSUPPORT: return "EPROTONOSUPPORT";
  385. #endif
  386. #ifdef EPROTOTYPE
  387.     case EPROTOTYPE: return "EPROTOTYPE";
  388. #endif
  389. #ifdef ERANGE
  390.     case ERANGE: return "ERANGE";
  391. #endif
  392. #if defined(EREFUSED) && (!defined(ECONNREFUSED) || (EREFUSED != ECONNREFUSED))
  393.     case EREFUSED: return "EREFUSED";
  394. #endif
  395. #ifdef EREMCHG
  396.     case EREMCHG: return "EREMCHG";
  397. #endif
  398. #ifdef EREMDEV
  399.     case EREMDEV: return "EREMDEV";
  400. #endif
  401. #ifdef EREMOTE
  402.     case EREMOTE: return "EREMOTE";
  403. #endif
  404. #ifdef EREMOTEIO
  405.     case EREMOTEIO: return "EREMOTEIO";
  406. #endif
  407. #ifdef EREMOTERELEASE
  408.     case EREMOTERELEASE: return "EREMOTERELEASE";
  409. #endif
  410. #ifdef EROFS
  411.     case EROFS: return "EROFS";
  412. #endif
  413. #ifdef ERPCMISMATCH
  414.     case ERPCMISMATCH: return "ERPCMISMATCH";
  415. #endif
  416. #ifdef ERREMOTE
  417.     case ERREMOTE: return "ERREMOTE";
  418. #endif
  419. #ifdef ESHUTDOWN
  420.     case ESHUTDOWN: return "ESHUTDOWN";
  421. #endif
  422. #ifdef ESOCKTNOSUPPORT
  423.     case ESOCKTNOSUPPORT: return "ESOCKTNOSUPPORT";
  424. #endif
  425. #ifdef ESPIPE
  426.     case ESPIPE: return "ESPIPE";
  427. #endif
  428. #ifdef ESRCH
  429.     case ESRCH: return "ESRCH";
  430. #endif
  431. #ifdef ESRMNT
  432.     case ESRMNT: return "ESRMNT";
  433. #endif
  434. #ifdef ESTALE
  435.     case ESTALE: return "ESTALE";
  436. #endif
  437. #ifdef ESUCCESS
  438.     case ESUCCESS: return "ESUCCESS";
  439. #endif
  440. #ifdef ETIME
  441.     case ETIME: return "ETIME";
  442. #endif
  443. #ifdef ETIMEDOUT
  444.     case ETIMEDOUT: return "ETIMEDOUT";
  445. #endif
  446. #ifdef ETOOMANYREFS
  447.     case ETOOMANYREFS: return "ETOOMANYREFS";
  448. #endif
  449. #ifdef ETXTBSY
  450.     case ETXTBSY: return "ETXTBSY";
  451. #endif
  452. #ifdef EUCLEAN
  453.     case EUCLEAN: return "EUCLEAN";
  454. #endif
  455. #ifdef EUNATCH
  456.     case EUNATCH: return "EUNATCH";
  457. #endif
  458. #ifdef EUSERS
  459.     case EUSERS: return "EUSERS";
  460. #endif
  461. #ifdef EVERSION
  462.     case EVERSION: return "EVERSION";
  463. #endif
  464. #if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN))
  465.     case EWOULDBLOCK: return "EWOULDBLOCK";
  466. #endif
  467. #ifdef EXDEV
  468.     case EXDEV: return "EXDEV";
  469. #endif
  470. #ifdef EXFULL
  471.     case EXFULL: return "EXFULL";
  472. #endif
  473.     }
  474.     return "unknown error";
  475. }
  476.  
  477. /*
  478.  *----------------------------------------------------------------------
  479.  *
  480.  * Tcl_SignalId --
  481.  *
  482.  *    Return a textual identifier for a signal number.
  483.  *
  484.  * Results:
  485.  *    This procedure returns a machine-readable textual identifier
  486.  *    that corresponds to sig.  The identifier is the same as the
  487.  *    #define name in signal.h.
  488.  *
  489.  * Side effects:
  490.  *    None.
  491.  *
  492.  *----------------------------------------------------------------------
  493.  */
  494.  
  495. char *
  496. Tcl_SignalId(sig)
  497.     int sig;            /* Number of signal. */
  498. {
  499.     switch (sig) {
  500. #ifdef SIGABRT
  501.     case SIGABRT: return "SIGABRT";
  502. #endif
  503. #ifdef SIGALRM
  504.     case SIGALRM: return "SIGALRM";
  505. #endif
  506. #ifdef SIGBUS
  507.     case SIGBUS: return "SIGBUS";
  508. #endif
  509. #ifdef SIGCHLD
  510.     case SIGCHLD: return "SIGCHLD";
  511. #endif
  512. #if defined(SIGCLD) && (!defined(SIGCHLD) || (SIGCLD != SIGCHLD))
  513.     case SIGCLD: return "SIGCLD";
  514. #endif
  515. #ifdef SIGCONT
  516.     case SIGCONT: return "SIGCONT";
  517. #endif
  518. #if defined(SIGEMT) && (!defined(SIGXCPU) || (SIGEMT != SIGXCPU))
  519.     case SIGEMT: return "SIGEMT";
  520. #endif
  521. #ifdef SIGFPE
  522.     case SIGFPE: return "SIGFPE";
  523. #endif
  524. #ifdef SIGHUP
  525.     case SIGHUP: return "SIGHUP";
  526. #endif
  527. #ifdef SIGILL
  528.     case SIGILL: return "SIGILL";
  529. #endif
  530. #ifdef SIGINT
  531.     case SIGINT: return "SIGINT";
  532. #endif
  533. #ifdef SIGIO
  534.     case SIGIO: return "SIGIO";
  535. #endif
  536. #if defined(SIGIOT) && (!defined(SIGABRT) || (SIGIOT != SIGABRT))
  537.     case SIGIOT: return "SIGIOT";
  538. #endif
  539. #ifdef SIGKILL
  540.     case SIGKILL: return "SIGKILL";
  541. #endif
  542. #if defined(SIGLOST) && (!defined(SIGIOT) || (SIGLOST != SIGIOT)) && (!defined(SIGURG) || (SIGLOST != SIGURG))
  543.     case SIGLOST: return "SIGLOST";
  544. #endif
  545. #ifdef SIGPIPE
  546.     case SIGPIPE: return "SIGPIPE";
  547. #endif
  548. #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO))
  549.     case SIGPOLL: return "SIGPOLL";
  550. #endif
  551. #ifdef SIGPROF
  552.     case SIGPROF: return "SIGPROF";
  553. #endif
  554. #if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ))
  555.     case SIGPWR: return "SIGPWR";
  556. #endif
  557. #ifdef SIGQUIT
  558.     case SIGQUIT: return "SIGQUIT";
  559. #endif
  560. #ifdef SIGSEGV
  561.     case SIGSEGV: return "SIGSEGV";
  562. #endif
  563. #ifdef SIGSTOP
  564.     case SIGSTOP: return "SIGSTOP";
  565. #endif
  566. #ifdef SIGSYS
  567.     case SIGSYS: return "SIGSYS";
  568. #endif
  569. #ifdef SIGTERM
  570.     case SIGTERM: return "SIGTERM";
  571. #endif
  572. #ifdef SIGTRAP
  573.     case SIGTRAP: return "SIGTRAP";
  574. #endif
  575. #ifdef SIGTSTP
  576.     case SIGTSTP: return "SIGTSTP";
  577. #endif
  578. #ifdef SIGTTIN
  579.     case SIGTTIN: return "SIGTTIN";
  580. #endif
  581. #ifdef SIGTTOU
  582.     case SIGTTOU: return "SIGTTOU";
  583. #endif
  584. #if defined(SIGURG) && (!defined(SIGIO) || (SIGURG != SIGIO))
  585.     case SIGURG: return "SIGURG";
  586. #endif
  587. #if defined(SIGUSR1) && (!defined(SIGIO) || (SIGUSR1 != SIGIO))
  588.     case SIGUSR1: return "SIGUSR1";
  589. #endif
  590. #if defined(SIGUSR2) && (!defined(SIGURG) || (SIGUSR2 != SIGURG))
  591.     case SIGUSR2: return "SIGUSR2";
  592. #endif
  593. #ifdef SIGVTALRM
  594.     case SIGVTALRM: return "SIGVTALRM";
  595. #endif
  596. #ifdef SIGWINCH
  597.     case SIGWINCH: return "SIGWINCH";
  598. #endif
  599. #ifdef SIGXCPU
  600.     case SIGXCPU: return "SIGXCPU";
  601. #endif
  602. #ifdef SIGXFSZ
  603.     case SIGXFSZ: return "SIGXFSZ";
  604. #endif
  605.     }
  606.     return "unknown signal";
  607. }
  608.  
  609. /*
  610.  *----------------------------------------------------------------------
  611.  *
  612.  * Tcl_SignalMsg --
  613.  *
  614.  *    Return a human-readable message describing a signal.
  615.  *
  616.  * Results:
  617.  *    This procedure returns a string describing sig that should
  618.  *    make sense to a human.  It may not be easy for a machine
  619.  *    to parse.
  620.  *
  621.  * Side effects:
  622.  *    None.
  623.  *
  624.  *----------------------------------------------------------------------
  625.  */
  626.  
  627. char *
  628. Tcl_SignalMsg(sig)
  629.     int sig;            /* Number of signal. */
  630. {
  631.     switch (sig) {
  632. #ifdef SIGABRT
  633.     case SIGABRT: return "SIGABRT";
  634. #endif
  635. #ifdef SIGALRM
  636.     case SIGALRM: return "alarm clock";
  637. #endif
  638. #ifdef SIGBUS
  639.     case SIGBUS: return "bus error";
  640. #endif
  641. #ifdef SIGCHLD
  642.     case SIGCHLD: return "child status changed";
  643. #endif
  644. #if defined(SIGCLD) && (!defined(SIGCHLD) || (SIGCLD != SIGCHLD))
  645.     case SIGCLD: return "child status changed";
  646. #endif
  647. #ifdef SIGCONT
  648.     case SIGCONT: return "continue after stop";
  649. #endif
  650. #if defined(SIGEMT) && (!defined(SIGXCPU) || (SIGEMT != SIGXCPU))
  651.     case SIGEMT: return "EMT instruction";
  652. #endif
  653. #ifdef SIGFPE
  654.     case SIGFPE: return "floating-point exception";
  655. #endif
  656. #ifdef SIGHUP
  657.     case SIGHUP: return "hangup";
  658. #endif
  659. #ifdef SIGILL
  660.     case SIGILL: return "illegal instruction";
  661. #endif
  662. #ifdef SIGINT
  663.     case SIGINT: return "interrupt";
  664. #endif
  665. #ifdef SIGIO
  666.     case SIGIO: return "input/output possible on file";
  667. #endif
  668. #if defined(SIGIOT) && (!defined(SIGABRT) || (SIGABRT != SIGIOT))
  669.     case SIGIOT: return "IOT instruction";
  670. #endif
  671. #ifdef SIGKILL
  672.     case SIGKILL: return "kill signal";
  673. #endif
  674. #if defined(SIGLOST) && (!defined(SIGIOT) || (SIGLOST != SIGIOT)) && (!defined(SIGURG) || (SIGLOST != SIGURG))
  675.     case SIGLOST: return "resource lost";
  676. #endif
  677. #ifdef SIGPIPE
  678.     case SIGPIPE: return "write on pipe with no readers";
  679. #endif
  680. #if defined(SIGPOLL) && (!defined(SIGIO) || (SIGPOLL != SIGIO))
  681.     case SIGPOLL: return "input/output possible on file";
  682. #endif
  683. #ifdef SIGPROF
  684.     case SIGPROF: return "profiling alarm";
  685. #endif
  686. #if defined(SIGPWR) && (!defined(SIGXFSZ) || (SIGPWR != SIGXFSZ))
  687.     case SIGPWR: return "power-fail restart";
  688. #endif
  689. #ifdef SIGQUIT
  690.     case SIGQUIT: return "quit signal";
  691. #endif
  692. #ifdef SIGSEGV
  693.     case SIGSEGV: return "segmentation violation";
  694. #endif
  695. #ifdef SIGSTOP
  696.     case SIGSTOP: return "stop";
  697. #endif
  698. #ifdef SIGSYS
  699.     case SIGSYS: return "bad argument to system call";
  700. #endif
  701. #ifdef SIGTERM
  702.     case SIGTERM: return "software termination signal";
  703. #endif
  704. #ifdef SIGTRAP
  705.     case SIGTRAP: return "trace trap";
  706. #endif
  707. #ifdef SIGTSTP
  708.     case SIGTSTP: return "stop signal from tty";
  709. #endif
  710. #ifdef SIGTTIN
  711.     case SIGTTIN: return "background tty read";
  712. #endif
  713. #ifdef SIGTTOU
  714.     case SIGTTOU: return "background tty write";
  715. #endif
  716. #if defined(SIGURG) && (!defined(SIGIO) || (SIGURG != SIGIO))
  717.     case SIGURG: return "urgent I/O condition";
  718. #endif
  719. #if defined(SIGUSR1) && (!defined(SIGIO) || (SIGUSR1 != SIGIO))
  720.     case SIGUSR1: return "user-defined signal 1";
  721. #endif
  722. #if defined(SIGUSR2) && (!defined(SIGURG) || (SIGUSR2 != SIGURG))
  723.     case SIGUSR2: return "user-defined signal 2";
  724. #endif
  725. #ifdef SIGVTALRM
  726.     case SIGVTALRM: return "virtual time alarm";
  727. #endif
  728. #ifdef SIGWINCH
  729.     case SIGWINCH: return "window changed";
  730. #endif
  731. #ifdef SIGXCPU
  732.     case SIGXCPU: return "exceeded CPU time limit";
  733. #endif
  734. #ifdef SIGXFSZ
  735.     case SIGXFSZ: return "exceeded file size limit";
  736. #endif
  737.     }
  738.     return "unknown signal";
  739. }
  740.